/*
    在C++中，类（class）和结构体（struct）有一些不同，但它们也有许多相似之处。下面是它们之间的主要区别和相似点：

    不同之处：

        默认访问控制（Default Access Control）：

            对于类（class），默认的成员访问控制是私有（private），这意味着类的数据成员和成员函数在类的外部不可直接访问，需要通过公有成员函数或友元函数来访问。
            对于结构体（struct），默认的成员访问控制是公有（public），这意味着结构体的数据成员和成员函数在结构体的外部可以直接访问。
        继承中的默认访问控制：

            当从类派生新的类时，基类的私有成员在派生类中仍然是私有的，不可直接访问。
            当从结构体派生新的结构体时，基类的公有成员在派生类中仍然是公有的，可直接访问。
            使用约定：

                传统上，类通常用于定义具有复杂行为、数据封装和私有成员的对象，它们旨在提供更严格的封装。
                结构体通常用于定义较简单的数据结构，它们更倾向于将多个相关数据字段组合在一起，而不涉及复杂的行为或封装。
    相似之处：

    成员变量和成员函数：
        类和结构体都可以包含数据成员和成员函数。
        无论是类还是结构体，都可以使用成员函数来访问和操作成员变量。

    继承：
        类和结构体都支持继承，可以派生出新的类或结构体。

    成员函数：
        类和结构体都可以拥有成员函数，这些函数可以用于操作和处理对象的数据。

    自定义类型：

        类和结构体都允许您定义自己的自定义数据类型。
        可以包含构造函数和析构函数，用于对象的初始化和清理。

    总结来说，类和结构体的主要区别在于默认的成员访问控制。
        除此之外，它们的行为和功能非常相似，您可以根据需要选择使用哪个来定义您的自定义类型。
        在实际编程中，通常是根据设计和封装需求来选择使用类或结构体。
*/

#include <iostream>

// struct
struct MyStruct
{
    int x; // public by default
    void printX()
    { // public by default
        std::cout << x << std::endl;
    }
};

// class
class MyClass
{
    int y; // private by default
public:
    void setY(int value)
    {
        y = value; // Accessible through a public member function
    }
    void printY()
    {
        std::cout << y << std::endl; // Accessible through a public member function
    }
};

int main(int argc, char const *argv[])
{

    MyStruct mystruct;
    MyClass myclass;

    mystruct.x = 100;
    // myclass.y = 100;//  member "MyClass::y" is inaccessible
    mystruct.printX();
    myclass.printY();

    return 0;
}
